const fp = require("lodash/fp");

const cars = [
  { name: "Ferrari FF", horsepower: 660, dollar_value: 700000, in_stock: true },
  {
    name: "Spyker C12 Zagato",
    horsepower: 650,
    dollar_value: 648000,
    in_stock: false,
  },
  {
    name: "Jaguar XKR-S",
    horsepower: 550,
    dollar_value: 132000,
    in_stock: false,
  },
  { name: "Audi R8", horsepower: 525, dollar_value: 114200, in_stock: false },
  {
    name: "Aston Martin One-77",
    horsepower: 750,
    dollar_value: 1850000,
    in_stock: true,
  },
  {
    name: "Pagani Huayra",
    horsepower: 700,
    dollar_value: 1300000,
    in_stock: false,
  },
];

// 练习1:函数组合 fp.flowRight()

// let islastInStock = function (arr) {
//     let last_car = fp.last(arr)
//     return fp.prop('in_stock', last_car)
// }
// console.log(islastInStock(cars))

let p1 = fp.flowRight(fp.prop("in_stock"), fp.last);
console.log("1.函数组合 fp.flowRight()");
console.log(p1(cars));

//练习2 函数组合 fp.flowRight(),fp.prop(),fp.first()获取car name
let p2 = fp.flowRight(fp.prop("name"), fp.first);
console.log("2.函数组合 fp.flowRight(),fp.prop(),fp.first()获取car name");
console.log(p2(cars));

//练习3使用函数组合的方式重构avergaeDollarValue
let _average = function (xs) {
  return fp.reduce(fp.add, 0, xs) / xs.length;
};

// let avergaeDollarValue = function (cars) {
//   let dollar_value = fp.map(function (car) {
//     return car.dollar_value;
//   }, cars);

//   return _average(dollar_value);
// };
// console.log(avergaeDollarValue());

let avergaeDollarValue1 = fp.flowRight(
  _average,
  fp.map((item) => item.dollar_value)
);
console.log("3.使用函数组合的方式重构avergaeDollarValue");
console.log(avergaeDollarValue1(cars));

//练习4 使用flowRight写一个sanitizeNames函数
let _underscore = fp.replace(/\W+/g, "_");

let sanitizeNames = fp.flowRight(_underscore);
console.log("4.使用flowRight写一个sanitizeNames函数");
console.log(sanitizeNames("Hello World"));
